cmake_minimum_required(VERSION 3.10.2)

project(caculator)

## --------- 搜索编译文件列表函数：aux_source_directory / file -----------------
#[[ aux_source_directory(< dir > < variable >)
  dir：要搜索的目录
  variable：将从dir目录下搜索到的源文件列表存储到该变量中
  PROJECT_SOURCE_DIR:是cmake预定义宏，等于cmake指令后面跟随的路径 ：例如cmake .. （${PROJECT_SOURCE}就是上一级目录）
  CMAKE_CURRENT_SOURCE_DIR : CMakeLists.txt所在路径 
]]
# aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC_LIST)

#[[ file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
  GLOB: 查询该目录下满足条件的所有文件名，并存储到变量中。
  GLOB_RECURSE：递归查询该目录下满足条件的所有文件名，并存储到变量中。
]]
file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
## --------- 搜索编译文件列表函数：aux_source_directory / file -----------------

# 指定头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)

# link_libraries(xx xxx),静态库链接  填入被链接库名称，可以多个  空格隔开
# link_libraries(app)

# link_directories(路径1  路径2 ...),填入被链接库路径（动态库/静态库），可以多个  空格隔开
# link_directories(${PROJECT_SOURCE_DIR}/lib_static)
link_directories(${PROJECT_SOURCE_DIR}/lib_share)

add_executable(${PROJECT_NAME} ${SRC_LIST})

#[[ target_link_libraries(target xxxx xx)
  target:目标名称（如可执行文件或库）
  xxxx xx :动态库链接  填入被链接库名称，可以多个  空格隔开
  一般写在add_executable的后面
]]
target_link_libraries(${PROJECT_NAME} app)

#[[
  通过命令查看该程序运行时链接的库及其路径：readelf ./caculator -d
  root@yugy:/mnt/hgfs/07CMake_learn/cmake/03_use_lib/build# readelf ./caculator -d

  Dynamic section at offset 0xd70 contains 31 entries:
    Tag        Type                         Name/Value
  0x0000000000000001 (NEEDED)             Shared library: [libapp.so]
  0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
  0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
  0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
  0x000000000000001d (RUNPATH)            Library runpath: [/mnt/hgfs/07CMake_learn/cmake/03_use_lib/lib_share]
  0x000000000000000c (INIT)               0x780
  0x000000000000000d (FINI)               0xa34
  0x0000000000000019 (INIT_ARRAY)         0x200d60
    .....
]]